/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

#include "OmenConfig.h"
#include "IOmenObject.h"

namespace Omen
{
    class ICamera;
    class IRenderer;
    class IScene;

    class OMEN_API ISceneManager : public Omen::IObject
    {
    public:
        virtual Omen_GUID classId() const = 0;                    /// <summary>Return class ID of SceneManager</summary>

        /// renderers
        virtual void         addRenderer( const IRenderer* pRenderer ) = 0;            /// <summary>Add a new renderer to the SceneManager</summary>
        virtual unsigned int getRenderers( const IRenderer** pRendererList, unsigned int maxSize ) = 0;    /// <summary> Add a new Renderer to the Renderer manager</summary>
        virtual unsigned int rendererCount() const = 0;                                    /// <summary>Get number of renderers in the  manager</summary>
        virtual const IRenderer* currentRenderer() const = 0;                            /// <summary>Return currently active renderer</summary>
        virtual void        setCurrentRenderer( const IRenderer* pCamera ) = 0;     /// <summary>Sets the currently active camera</summary>

        /// scenes
        virtual void         addScene( IScene* pScene ) = 0;                    /// <summary> Add a new scene to the scene manager</summary>
        virtual unsigned int getScenes( const IScene** pSceneList, unsigned int maxSize ) = 0;    /// <summary> Add a new Scene to the Scene manager</summary>
        virtual unsigned int sceneCount() const = 0;                                    /// <summary>Get number of Scenes in the  manager</summary>
        virtual IScene*      currentScene() = 0;                                /// <summary>Get current scene</summary>
        virtual void        setCurrentScene( IScene* pScene ) = 0;            /// <summary>Set current scene</summary>

    protected:
    private:
    };
}